// router/dynamicRoutes.ts
// 更新 initDynamicRoutes，确保 dynamicRoutes 被更新
import router from './index';
import { useRouteStore } from '@/store/index'; // 导入 store
import type { RouteRecordRaw, RouteRecordRedirectOption } from 'vue-router';
 
// 定义菜单项类型，确保 `name` 是 `string`
type MenuItem = Omit<RouteRecordRaw, 'component' | 'children' | 'redirect'> & {
  name: string; // 必须有 name 属性
  path: string; // 必须有 path 属性
  component?: () => Promise<Component>; // 用于动态加载组件的路径
  children?: MenuItem[]; // 子路由类型
  redirect?: string; // 调整 redirect 为更简单的 string 类型
  meta?: {
    title: string;
  };
};
// Vite 支持使用特殊的 import.meta.glob 函数从文件系统导入多个模块
const modules: Record<string, () => Promise<Component>> = import.meta.glob('../views/**/**.vue');
 
// 初始化动态路由
export const initDynamicRoutes = (menuData: MenuItem[]) => {
  const routeStore = useRouteStore(); // 获取 store
  const routerList: MenuItem[] = [];
  const addedRoutes = new Set(); // 用于跟踪已添加的路由，防止重复添加
 
  // 递归处理路由
  const processRoutes = (routes: MenuItem[]): MenuItem[] => {
    return routes.map((item) => {
      if (addedRoutes.has(item.name)) return null; // 防止重复处理
      addedRoutes.add(item.name); // 标记路由为已处理
 
      const componentLoader = modules[`../views${item.component}.vue`];
      const route: MenuItem = {
        path: item.path,
        name: item.name as string,
        component: componentLoader , // 提供默认组件以防找不到
        meta: item.meta,
      };
 
      // 如果有子路由，递归处理
      if (item.children && item.children.length > 0) {
        route.children = processRoutes(item.children);
        route.redirect = route.children[0]?.path; // 默认重定向到第一个子路由
      } else {
        route.children = undefined; // 明确设置为 undefined
      }
 
      return route;
    }).filter((route) => route !== null) as MenuItem[]; // 过滤掉 null 项
  };
 
  // 顶级路由处理
  const parentRouter = processRoutes(menuData);
 
  // 根路由配置
  routerList.push({
    path: '/',
    name: 'home',
    component: () => import('../layout/index.vue'),
    children: parentRouter, // 顶级路由作为子路由
    redirect: parentRouter[0]?.path || '/', // 确保有默认重定向路径
  });
  
  // 将路由存储到 store 中
  routeStore.dynamicRoutes = routerList;
  // 添加路由到 Vue Router
  routerList.forEach((route) => {
    router.addRoute(route as RouteRecordRaw);
  });
};